/*
FreqLimit= {reqCount:0, reqLimitMap:{}}
reqCount表示全局http请求次数，reqLimitMap基于url的分钟请求次数统计
1.当页面FreqLimit.reqCount大于1000，所有FreqLimit.check返回false，
  不再接收任何请求，并弹出模式框，用户确认后，重置FreqLimit
2.当某个url请求次数触发FreqLimit.reqLimitMap[url][time] >100次，所有FreqLimit.check返回false，
  不再接收任何请求，并弹出模式框，用户确认后，重置FreqLimit。其中time为0-1439，表示一天中的1440分钟。
*/
class Frenquency {
  constructor() {
    this.totalCount = 0
    this.map = {}
  }
  reset() {
    this.totalCount = 0
    this.map = {}
  }
  add(url,method) {
    let urlKey = url.split('?')[0] + '_' + (method || 'get')// 去掉接口中带的查询字符串
    let minuteKey = new Date().getHours() * 60 + new Date().getMinutes()
    if (!this.map.hasOwnProperty(urlKey)) {
      this.map[urlKey] = {}
    }
    // 分钟内单个接口计数
    if (!this.map[urlKey].hasOwnProperty(minuteKey)) {
        this.map[urlKey][minuteKey] = 1
    } else {
        this.map[urlKey][minuteKey]++
    }
    this.totalCount++
  }
  getKey(url,method) {
    let urlKey = url.split('?')[0] + '_' + (method || 'get')// 去掉接口中带的查询字符串
    let minuteKey = new Date().getHours() * 60 + new Date().getMinutes()
    return this.map[urlKey] && this.map[urlKey][minuteKey] || 0
  }
  // 获取单个页面当前调用次数
  getTotal() {
    return this.totalCount
  }
  checkUrl(url,method) {

    if (this.getTotal() > 1000) return true
    // 单个接口，在当前页面请求100次则抛出错误；刷新页面后，恢复正常
    if (this.getKey(url,method) > 100) return true

    this.add(url,method)

    return false
  }
}
let o = new Frenquency()
export default o
